// ajax请求封装函数
function ajaxRequest(options) {

    // 存储默认值
    var defaults = {
        type: 'get',
        url: '',
        data: {},
        success: function () { },
        error: function () { }
    };

    // 用options对象中的属性覆盖默认的defaults对象中的属性
    // object.assign方法会影响原对象，不接收也不赋值
    Object.assign(defaults, options);

    // 1. 创建对象
    let xhr = new XMLHttpRequest();
    // 拼接参数的变量
    let params = '';

    // 循环遍历传递进来的对象格式参数
    for (let attr in defaults.data) {
        // 将参数拼接为字符串
        params += attr + '=' + defaults.data[attr] + '&';
    }

    // 把最后的&截掉并拼接到url后
    params = params.substring(0, params.length - 1);
    defaults.url = defaults.url + '?' + params;

    // 2. 配置对象
    xhr.open(defaults.type, defaults.url);
    xhr.withCredentials = true;

    // 3. 发送请求
    xhr.send();

    // 4.获取响应
    xhr.onload = function () {
        // 获取响应头中Content-Type属性的值
        var contentType = xhr.getResponseHeader('Content-Type');
        // 服务端返回的数据
        var responseText = xhr.responseText;
        // 判断响应类型中，字符串是否包含application/json
        if (contentType.includes('application/json')) {
            // 如果是，则把json字符串转换为json对象
            responseText = JSON.parse(responseText);
        }

        // 分离请求成功与失败的处理
        if (xhr.status == 200 && xhr.readyState == 4) {
            // 请求成功，调用处理成功的函数
            // 返回响应文本
            defaults.success(responseText);
        } else {
            // 请求失败，调用处理失败的函数
            // 返回xhr对象
            defaults.error(xhr);
        }
    }
}